#ifndef NODO_H
#define NODO_H

#include <list.h>

class Nodo {
public:
    Nodo();
   
    bool esTerminal() const;
   
    /**
     * Este deberia ser la cantidad de fichas de algun jugador.
     */
    int Valor() const;
   
    virtual ~Nodo();
   
    /**
      * Clase para Iterar sobre los hijos de un Nodo.
      */
    class Iterador {
    public:
        /**
         * Funcion que construye un Iterador de Nodo para generar todos los
         * posibles hijos.
         *
         * @param nodo:
         * Nodo a generar los Hijos.
         *
         * @param ordenamientoMax:
         * En caso de que sea posible para el juego, elejir de que modo se
         * van a ordenar los hijos, si es por MAX (true) o por MIN (false).
         */
        Iterador(Nodo *nodo, bool ordenamientoMax);
       
        /**
         * Retorna el siguiente hijo que le toca a este iterador sobre el nodo
         * actual, o NULL en caso de no haber mas hijos.
         */
        Nodo *Siguiente();
       
        virtual ~Iterador();
    };
   
public:
    Nodo::Nodo(int pos, Nodo d);
    Nodo::Nodo();
    
private:
    
    state_t estado;
    unsigned char* negros;
    unsigned char TamNegros;
    
    unsigned char* blancos;
    unsigned char TamBlancos;
    
    bool JuegaBlanco;
    
    bool Existe(unsigned char *arr, int tam);
    bool adyacentesBlancos(int pos);
    bool adyacentesNegros(int pos);
};

#endif  /* NODO_H */

